/**
 * 使用原型链实现对原型属性和方法的继承,通过借用构造函数来实现对实例属性的继承
 * 
 * 首先 在子方法中显示调用一次父亲 Father.call(this,name)
 * 第一次操作 其实就是显示调用了一下父类函数 绑定this的同时以获取其this指向的属性
 * 
 * 其次 在子方法的原型对象上手动 new Father()
 * 第二次操作 其实就是将父亲的原型对象继承过来
 */

function Father(name) {
  this.name = name;
  this.colors = ["red", "blue", "green"];
}
Father.prototype.sayName = function () {
  console.log(this.name);
};
function Son(name, age) {
  Father.call(this, name);//继承实例属性，第一次调用Father()
  this.age = age;
}
Son.prototype = new Father();//继承父类方法,第二次调用Father()
Son.prototype.sayAge = function () {
  console.log(this.age);
}
var instance1 = new Son("louis", 5);
instance1.colors.push("black");
console.log(instance1.colors);//"red,blue,green,black"
instance1.sayName();//louis
instance1.sayAge();// 5